package com.coa.cadastros;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import com.coa.data.mem.RepositorioAlunos;
import com.coa.data.mem.RepositorioProfessores;
import com.coa.data.mem.RepositorioTurmas;
import com.coa.educacao.Aluno;
import com.coa.educacao.Disciplina;
import com.coa.educacao.MatriculaAluno;
import com.coa.educacao.PerfilCurricular;
import com.coa.educacao.Professor;
import com.coa.educacao.Turma;
import com.coa.educacao.TurmasSelecionadas;

import exceptions.ExceptionCadastro;

public class Fachada {
 
	private CadastroAlunos cadastroAlunos;
	private CadastroProfessores cadastroProfessores;
	
	private CadastroMatriculaAlunos 
	         cadastroMatriculaAluno;
	
	private CadastroTurmas cadastroTurmas;
	
	private static Fachada instancia;
	
	private Fachada() {
		
		this.cadastroAlunos = new CadastroAlunos( new RepositorioAlunos());
		this.cadastroProfessores = new CadastroProfessores(new RepositorioProfessores());
		this.cadastroMatriculaAluno = new CadastroMatriculaAlunos(null);
		this.cadastroTurmas = new CadastroTurmas(new RepositorioTurmas());
		
	}
	
	public static Fachada getInstancia() {
		if(instancia == null)
		{
			instancia = new Fachada();
		
		}
		
		return instancia;
	}
	
	public TurmasSelecionadas iniciarMatricula(String cpf) {
		
		Aluno aluno = cadastroAlunos.procurar(cpf);
		PerfilCurricular perfil = aluno.getPerfilCurricular();
		Iterator<Disciplina> disciplinasCursadas
		             = this.cadastroMatriculaAluno.getDisciplinasCursadas(aluno);
		
		Iterator<Disciplina> sugeridas = perfil.getDisciplinasPorPeriodo(aluno.getPeriodo());
		TurmasSelecionadas turmas = createTurmasSugeridas(disciplinasCursadas, sugeridas);
		
		
		return turmas;
		
	}
	
	
	public MatriculaAluno confirmarMatricula(TurmasSelecionadas turmas) {
		
		
		return new MatriculaAluno();
		
	}
	
	public void efetuarMatricula(MatriculaAluno matricula) throws ExceptionCadastro {
		cadastroMatriculaAluno.cadastrar(matricula);
	}
	
	
	private TurmasSelecionadas createTurmasSugeridas(Iterator<Disciplina> disciplinas,Iterator<Disciplina> sugeridas) {
		
		List<Disciplina> result = new ArrayList<Disciplina>();
		
		for (Iterator<Disciplina> i = sugeridas; i.hasNext();) {
			Disciplina sug = (Disciplina) i.next();
		
			result.add(sug);
			
			for (Iterator j = disciplinas; j.hasNext();) {
				Disciplina disc = (Disciplina) j.next();
				
				
			}
			
		}
		
		return null;
	}


	
	public void cadastrarTurma(Turma turma) throws ExceptionCadastro {
		cadastroTurmas.cadastrar(turma);
	}
	
	public void cadastrarAluno(Aluno aluno) throws ExceptionCadastro  {
		
	
			cadastroAlunos.cadastrar(aluno);
	}
	
	public void atualizarAluno(Aluno aluno) {
		this.cadastroAlunos.atualizar(aluno);
	}
	
	
	
	public void  removerAluno(String cpf) {
		this.cadastroAlunos.remover(cpf);
	}
	
	public void cadastrarProfessor(Professor professor) throws ExceptionCadastro {
		cadastroProfessores.cadastrar(professor);
	}
	 
	 
}
 
